import axios from 'axios'
axios.defaults.timeout = 5000;//超时设置
axios.defaults.withCredentials = true;//是否允许跨域
//axios post请求默认会把数据以application/json发送，后端@RequestParam无法取值；修改后以form的params传参
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';//响应头设置
axios.defaults.baseURL = import.meta.env.VITE_API_URL //即后台的地址

axios.interceptors.response.use(
    //响应成功
    response => {
        //status为200则正常
        if (response.status == 200) {
            return Promise.resolve(response);
        } else {
            return Promise.reject(response);
        }
    },
    //响应错误
    error => {
        if (error && error.response) {
            switch (error.response.status) {
                case 400:
                    error.message = '错误请求'
                    break;
                case 401:
                    error.message = '未授权，请重新登录'
                    break;
                case 403:
                    error.message = '拒绝访问'
                    break;
                case 404:
                    error.message = '请求错误,未找到该资源'
                    window.location.href = "/NotFound"
                    break;
                case 405:
                    error.message = '请求方法未允许'
                    break;
                case 408:
                    error.message = '请求超时'
                    break;
                case 500:
                    error.message = '服务器端出错'
                    break;
                case 501:
                    error.message = '网络未实现'
                    break;
                case 502:
                    error.message = '网络错误'
                    break;
                case 503:
                    error.message = '服务不可用'
                    break;
                case 504:
                    error.message = '网络超时'
                    break;
                case 505:
                    error.message = 'http版本不支持该请求'
                    break;
                default:
                    error.message = `连接错误${error.response.status}`

            }
        } else {
            //超时处理
            if (JSON.stringify(error).includes('timeout')) {
                error.message = '服务器响应超时，请刷新当前页'
            }
            error.message = '连接服务器失败'
        }
        return Promise.reject(error.response);
    }
)

//get请求
function get(url, params) {
    return axios.get(url, {
        params: params
    })
};

function post(url, params) {
    return axios.post(url, params)
};

function put(url, params) {
    return axios.put(url, params)
};

function del(url, params) {
    return axios.delete(url, {
        params: params
    })
};

export { get, post, put, del }